home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 476-500 / disk_498 / wordsearch / src / interface.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  12KB  |  377 lines

  1. #include <stdio.h>
  2. #include <exec/types.h>
  3. #include <exec/libraries.h>
  4. #include "interface.h"
  5. #include "wsearch.h"
  6. #include <libraries/reqbase.h>
  7.  
  8. #define openxwl 200
  9. #define openywl 150
  10. #define openxdp 320
  11. #define openydp 150
  12.  
  13. #define EXTRA  CHECKWIDTH
  14. #define FLAGSA CHECKIT|ITEMTEXT|MENUTOGGLE|ITEMENABLED|HIGHCOMP
  15. #define FLAGSB CHECKIT|ITEMTEXT|MENUTOGGLE|ITEMENABLED|COMMSEQ|HIGHCOMP
  16. #define FLAGSC ITEMTEXT|MENUTOGGLE|ITEMENABLED|HIGHCOMP
  17. #define FLAGSD ITEMTEXT|MENUTOGGLE|ITEMENABLED|COMMSEQ|HIGHCOMP
  18.  
  19. unsigned char fontheight;
  20. unsigned char fontwidth;
  21.  
  22. char undo[MAXSIZE+1];
  23.  
  24. struct IntuitionBase *IntuitionBase = NULL;
  25. struct GfxBase *GfxBase = NULL;
  26. struct Window *WLWin = NULL,*DPWin = NULL;
  27. struct RastPort *WLRP = NULL,*DPRP = NULL;
  28. struct IntuiMessage *IMsg = NULL,Msg;
  29. struct ReqLib *ReqBase=NULL;
  30.  
  31. struct TextAttr tp=
  32. {
  33.   "topaz.font",                 /* Topaz font. */
  34.   TOPAZ_EIGHTY,                 /* 80/40 characters. */
  35.   FS_NORMAL,            /* Underlined italic chars. */ 
  36.   FPF_ROMFONT                   /* Exist in ROM. */
  37. };
  38.  
  39. struct Gadget Words[MAXWORD];
  40. struct StringInfo WordInfo[MAXWORD];
  41. struct Gadget *LastWord=&Words[0];
  42.  
  43. struct PropInfo
  44.   zp = {
  45.         FREEVERT|AUTOKNOB,
  46.         0,0,
  47.         0,MAXBODY,
  48.         0,0,0,0,0,0
  49.        };
  50. struct Image zimg;
  51. struct Gadget
  52.    z = {
  53.         &Words[0],
  54.         -15,9,16,-17,
  55.         GADGHCOMP|GRELRIGHT|GRELHEIGHT,
  56.         GADGIMMEDIATE|FOLLOWMOUSE|RELVERIFY,
  57.         PROPGADGET|GZZGADGET,
  58.         (APTR)&zimg,
  59.         NULL,
  60.         NULL,
  61.         0,
  62.         (APTR)&zp,
  63.         0,NULL
  64.        };
  65. struct NewWindow NewWinWL =
  66.        {
  67.         0, 0, openxwl,openywl,
  68.         0, 1,
  69.         CLOSEWINDOW|GADGETUP|GADGETDOWN|NEWSIZE|
  70.         MOUSEMOVE|REFRESHWINDOW|MENUPICK,
  71.         WINDOWCLOSE|WINDOWDRAG|WINDOWDEPTH|WINDOWSIZING|
  72.         GIMMEZEROZERO|SIMPLE_REFRESH,
  73.         &z,
  74.         NULL,
  75.         "WORDLIST",
  76.         NULL, NULL,
  77.         75, 75, MAXSIZE*FONTWIDTH, MAXROWS*FONTHEIGHT,
  78.         WBENCHSCREEN
  79.        };
  80.  
  81. struct IntuiText IText[MAXROWS];
  82. struct PropInfo
  83.   xp = {
  84.         FREEHORIZ|AUTOKNOB,
  85.         0,0,
  86.         MAXBODY,0,
  87.         0,0,0,0,0,0
  88.        },
  89.   yp = {
  90.         FREEVERT|AUTOKNOB,
  91.         0,0,
  92.         0,MAXBODY,
  93.         0,0,0,0,0,0
  94.        };
  95. struct Image ximg,yimg;
  96. struct Gadget
  97.   x = {
  98.         NULL,
  99.         1,-8,-15,9,
  100.         GADGHCOMP|GRELBOTTOM|GRELWIDTH,
  101.         GADGIMMEDIATE|FOLLOWMOUSE|RELVERIFY|BOTTOMBORDER,
  102.         PROPGADGET|GZZGADGET,
  103.         (APTR)&ximg,
  104.         NULL,
  105.         NULL,
  106.         0,
  107.         (APTR)&xp,
  108.         0,NULL
  109.       },
  110.   y = {
  111.         &x,
  112.         -15,9,16,-17,
  113.         GADGHCOMP|GRELRIGHT|GRELHEIGHT,
  114.         GADGIMMEDIATE|FOLLOWMOUSE|RELVERIFY,
  115.         PROPGADGET|GZZGADGET,
  116.         (APTR)&yimg,
  117.         NULL,
  118.         NULL,
  119.         0,
  120.         (APTR)&yp,
  121.         0,NULL
  122.       };
  123. struct NewWindow NewWinDP =
  124.         {
  125.         200, 0, openxdp,openydp,
  126.         0, 1,
  127.         CLOSEWINDOW|GADGETUP|GADGETDOWN|NEWSIZE|
  128.         MOUSEMOVE|REFRESHWINDOW|MENUPICK,
  129.         WINDOWCLOSE|WINDOWDRAG|WINDOWDEPTH|WINDOWSIZING|
  130.         GIMMEZEROZERO|SIMPLE_REFRESH,
  131.         &y,
  132.         NULL,
  133.         "PUZZLE",
  134.         NULL, NULL,
  135.         75, 75, MAXCOLS*FONTWIDTH, MAXROWS*FONTHEIGHT,
  136.         WBENCHSCREEN
  137.         };
  138.  
  139. struct IntuiText IT[] =
  140.   {
  141.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Open"},
  142.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Save"},
  143.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Save As"},
  144.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Print"},
  145.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Wordlist"},
  146.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Display"},
  147.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Print Redirect"},
  148.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Dimensions"},
  149.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Generate"},
  150.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "New Key"},
  151.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "New Puzzle"},
  152.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Word Direction"},
  153.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Key"},
  154.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Puzzle"},
  155.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Direction"},
  156.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "+X+Y"},
  157.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "+X-Y"},
  158.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "-X+Y"},
  159.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "-X-Y"},
  160.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "+Y+X"},
  161.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "+Y-X"},
  162.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "-Y+X"},
  163.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "-Y-X"},
  164.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Insert"},
  165.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Delete"},
  166.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Sort"},
  167.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Left"},
  168.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Left-Down"},
  169.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Down"},
  170.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Right-Down"},
  171.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Right"},
  172.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Right-Up"},
  173.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Up"},
  174.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Left-Up"},
  175.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "New"},
  176.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "To File"},
  177.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "To Clipboard"},
  178.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Uppercase All"},
  179.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Clean Up"},
  180.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "To Buffer"},
  181.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "From Buffer"},
  182.     { 0, 1, JAM2, CHECKWIDTH, 0, &tp, "Try to Overlap"}
  183.   };
  184. struct MenuItem M0I4[] =
  185.   {
  186.     {&M0I4[ 1], 80,  2,160, 10,FLAGSD,0,(APTR)&IT[ 4],NULL, 'w',NULL},
  187.     {NULL     , 80, 12,160, 10,FLAGSD,0,(APTR)&IT[ 5],NULL, 'd',NULL}
  188.   };
  189. struct MenuItem M0I5[] =
  190.   {
  191.     {&M0I5[ 1], 80,  2,160, 10,FLAGSA,2,(APTR)&IT[35],NULL,NULL,NULL},
  192.     {NULL     , 80, 12,160, 10,FLAGSA,1,(APTR)&IT[36],NULL,NULL,NULL}
  193.   };
  194. struct MenuItem M1I1[] =
  195.   {
  196.     {&M1I1[ 1], 80,  2,160, 10,FLAGSD,0,(APTR)&IT[ 9],NULL, 'n',NULL},
  197.     {&M1I1[2] , 80, 12,160, 10,FLAGSD,0,(APTR)&IT[10],NULL, 'z',NULL},
  198.     {NULL     , 80, 22,160, 10,FLAGSA,0,(APTR)&IT[41],NULL, NULL, NULL}
  199.   };
  200. struct MenuItem M1I2[] =
  201.   {
  202.     {&M1I2[ 1], 80,  2, 100, 10,FLAGSA|CHECKED,0,(APTR)&IT[26],NULL,NULL,NULL},
  203.     {&M1I2[ 2], 80, 12, 100, 10,FLAGSA|CHECKED,0,(APTR)&IT[27],NULL,NULL,NULL},
  204.     {&M1I2[ 3], 80, 22, 100, 10,FLAGSA|CHECKED,0,(APTR)&IT[28],NULL,NULL,NULL},
  205.     {&M1I2[ 4], 80, 32, 100, 10,FLAGSA|CHECKED,0,(APTR)&IT[29],NULL,NULL,NULL},
  206.     {&M1I2[ 5], 80, 42, 100, 10,FLAGSA|CHECKED,0,(APTR)&IT[30],NULL,NULL,NULL},
  207.     {&M1I2[ 6], 80, 52, 100, 10,FLAGSA|CHECKED,0,(APTR)&IT[31],NULL,NULL,NULL},
  208.     {&M1I2[ 7], 80, 62, 100, 10,FLAGSA|CHECKED,0,(APTR)&IT[32],NULL,NULL,NULL},
  209.     {NULL     , 80, 72, 100, 10,FLAGSA|CHECKED,0,(APTR)&IT[33],NULL,NULL,NULL}
  210.   };
  211. struct MenuItem M2I2[] =
  212.   {
  213.     {&M2I2[ 1], 80,  2, 80, 10,FLAGSA|CHECKED,254,(APTR)&IT[15],NULL,NULL,NULL},
  214.     {&M2I2[ 2], 80, 12, 80, 10,FLAGSA,253,(APTR)&IT[16],NULL,NULL,NULL},
  215.     {&M2I2[ 3], 80, 22, 80, 10,FLAGSA,251,(APTR)&IT[17],NULL,NULL,NULL},
  216.     {&M2I2[ 4], 80, 32, 80, 10,FLAGSA,247,(APTR)&IT[18],NULL,NULL,NULL},
  217.     {&M2I2[ 5], 80, 42, 80, 10,FLAGSA,239,(APTR)&IT[19],NULL,NULL,NULL},
  218.     {&M2I2[ 6], 80, 52, 80, 10,FLAGSA,223,(APTR)&IT[20],NULL,NULL,NULL},
  219.     {&M2I2[ 7], 80, 62, 80, 10,FLAGSA,191,(APTR)&IT[21],NULL,NULL,NULL},
  220.     {NULL     , 80, 72, 80, 10,FLAGSA,127,(APTR)&IT[22],NULL,NULL,NULL}
  221.   };
  222. struct MenuItem M0[] =
  223.   {
  224.     {&M0[ 1],  0,  0,160, 10,FLAGSC,0,(APTR)&IT[34],NULL,NULL,NULL},
  225.     {&M0[ 2],  0, 12,160, 10,FLAGSD,0,(APTR)&IT[ 0],NULL, 'o',NULL},
  226.     {&M0[ 3],  0, 24,160, 10,FLAGSD,0,(APTR)&IT[ 1],NULL, 's',NULL},
  227.     {&M0[ 4],  0, 36,160, 10,FLAGSC,0,(APTR)&IT[ 2],NULL,NULL,NULL},
  228.     {&M0[ 5],  0, 48,160, 10,FLAGSC,0,(APTR)&IT[ 3],NULL,NULL,&M0I4[0]},
  229.     {NULL   ,  0, 60,160, 10,FLAGSC,0,(APTR)&IT[ 6],NULL,NULL,&M0I5[0]}
  230.   };
  231. struct MenuItem M1[] =
  232.   {
  233.     {&M1[ 1],  0,  0,160, 10,FLAGSC,0,(APTR)&IT[ 7],NULL,NULL,NULL},
  234.     {&M1[ 2],  0, 12,160, 10,FLAGSC,0,(APTR)&IT[ 8],NULL,NULL,&M1I1[0]},
  235.     {NULL   ,  0, 24,160, 10,FLAGSC,0,(APTR)&IT[11],NULL,NULL,&M1I2[0]}
  236.   };
  237. struct MenuItem M2[] =
  238.   {
  239.     {&M2[ 1],  0,  0, 160, 10,FLAGSD,0,(APTR)&IT[12],NULL, 'k',NULL},
  240.     {&M2[ 2],  0, 12, 160, 10,FLAGSD,0,(APTR)&IT[13],NULL, 'p',NULL},
  241.     {NULL   ,  0, 24, 160, 10,FLAGSC,0,(APTR)&IT[14],NULL,NULL,&M2I2[0]}
  242.   };
  243. struct MenuItem M3[] =
  244.   {
  245.     {&M3[ 1],  0,  0, 160, 10,FLAGSC,0,(APTR)&IT[39],NULL,NULL,NULL},
  246.     {&M3[ 2],  0, 12, 160, 10,FLAGSC,0,(APTR)&IT[40],NULL,NULL,NULL},
  247.     {&M3[ 3],  0, 24, 160, 10,FLAGSD,0,(APTR)&IT[23],NULL, 'i',NULL},
  248.     {&M3[ 4],  0, 36, 160, 10,FLAGSD,0,(APTR)&IT[24],NULL, 'd',NULL},
  249.     {&M3[ 5],  0, 48, 160, 10,FLAGSC,0,(APTR)&IT[38],NULL,NULL,NULL},
  250.     {&M3[ 6],  0, 60, 160, 10,FLAGSC,0,(APTR)&IT[37],NULL,NULL,NULL},
  251.     {NULL   ,  0, 72, 160, 10,FLAGSC,0,(APTR)&IT[25],NULL,NULL,NULL}
  252.   };
  253. struct Menu TheMenu[] =
  254.   {
  255.     {&TheMenu[ 1],  0,  0,100, 10,MENUENABLED,"Project ",&M0[0]},
  256.     {&TheMenu[ 2],100,  0,100, 10,MENUENABLED,"Puzzle  ",&M1[0]},
  257.     {&TheMenu[ 3],200,  0,100, 10,MENUENABLED,"Display ",&M2[0]},
  258.     { NULL       ,300,  0,100, 10,MENUENABLED,"Wordlist",&M3[0]}
  259.   };
  260.  
  261. BOOL init()
  262. {
  263.    int i;
  264.    
  265.    key = (char *)calloc((px+1)*(py+1),sizeof(char));
  266.    if(key<=0)
  267.    {
  268.     fprintf(stderr,"Unable to Allocate Memory for new Key\n");
  269.     return(FALSE);
  270.    }
  271.    puzzle = (char *)calloc((px+1)*(py+1),sizeof(char));
  272.    if(puzzle<=0)
  273.    {
  274.     fprintf(stderr,"Unable to Allocate Memory for new Puzzle\n");
  275.     return(FALSE);
  276.    }
  277.    display = (char *)calloc((max(px,py)+1)*(max(px,py)+2),sizeof(char));
  278.    if(display<=0)
  279.    {
  280.     fprintf(stderr,"Unable to Allocate Memory for new Display\n");
  281.     return(FALSE);
  282.    }
  283.  
  284.  
  285.     IntuitionBase = (struct IntuitionBase *)
  286.       OpenLibrary("intuition.library",0);
  287.     if(IntuitionBase == NULL) 
  288.     {
  289.     fprintf(stderr,"Couldn't Open Intuition.library\n");
  290.     return(FALSE);
  291.     }
  292.     
  293.     GfxBase = (struct GfxBase *)
  294.       OpenLibrary("graphics.library",0);
  295.     if(GfxBase == NULL)
  296.     {
  297.     fprintf(stderr,"Couldn't Open Graphics.library\n");
  298.     return(FALSE);
  299.     }
  300.  
  301.     ReqBase = (struct ReqLib *)
  302.       OpenLibrary("req.library",REQVERSION);
  303.     if(ReqBase == NULL)
  304.     {
  305.     fprintf(stderr,"Couldn't Open Req.library V2\n");
  306.     return(FALSE);
  307.     }
  308.  
  309.     i = GetFontHandW();
  310.     fontheight = (i>>8)&0xFF;
  311.     fontwidth = i&0xFF;
  312.  
  313.     for(i=0;i<MAXROWS;i++)
  314.      {
  315.         IText[i].FrontPen = 1;
  316.         IText[i].BackPen = 0;
  317.         IText[i].DrawMode = JAM2;
  318.         IText[i].LeftEdge = 0;
  319.         IText[i].TopEdge = i * fontheight;
  320.         IText[i].ITextFont = NULL;
  321.         IText[i].NextText = &IText[i+1];
  322.     IText[i].IText = " ";
  323.      }
  324.     IText[MAXROWS-1].NextText = NULL;
  325.  
  326.     for(i=0;i<MAXWORD;i++)
  327.      {
  328.         word[i][0] = 0;
  329.         Words[i].NextGadget = &Words[i+1];
  330.         Words[i].LeftEdge = 0;
  331.         Words[i].TopEdge = i * (FONTHEIGHT+2);
  332.         Words[i].Width = 0;
  333.         Words[i].Height = FONTHEIGHT+2;
  334.         Words[i].Flags = GADGHCOMP|GRELWIDTH;
  335.         Words[i].Activation = GADGIMMEDIATE|RELVERIFY;
  336.         Words[i].GadgetType = STRGADGET;
  337.         Words[i].GadgetRender = NULL;
  338.         Words[i].SelectRender = NULL;
  339.         Words[i].GadgetText = NULL;
  340.         Words[i].MutualExclude = 0;
  341.         Words[i].SpecialInfo = (APTR)&WordInfo[i];
  342.         Words[i].GadgetID = 1;
  343.         WordInfo[i].Buffer = word[i];
  344.         WordInfo[i].UndoBuffer = undo;
  345.         WordInfo[i].BufferPos = 0;
  346.         WordInfo[i].MaxChars = MAXSIZE;
  347.         WordInfo[i].DispPos = 0;
  348.      }
  349.     Words[MAXWORD-1].NextGadget = NULL;
  350.  
  351.     WLWin = (struct Window *) OpenWindow(&NewWinWL);
  352.     if(WLWin == NULL)
  353.     {
  354.     fprintf(stderr,"Couldn't Open Wordlist Window\n");
  355.         return(FALSE);
  356.     }
  357.     WLRP = WLWin->RPort;
  358.     SetMenuStrip(WLWin,TheMenu);
  359.     OffMenu(WLWin,(ULONG)SHIFTMENU(0)+SHIFTITEM(5)+SHIFTSUB(1));
  360.  
  361.  
  362.     DPWin = (struct Window *) OpenWindow(&NewWinDP);
  363.     if(DPWin == NULL)
  364.     {
  365.     fprintf(stderr,"Couldn't Open Display Window\n");
  366.     return(FALSE);
  367.     }
  368.     DPRP = DPWin->RPort;
  369.     SetMenuStrip(DPWin,TheMenu);
  370.     OffMenu(DPWin,(ULONG)SHIFTMENU(0)+SHIFTITEM(5)+SHIFTSUB(1));
  371.  
  372.     Msg.Class = NEWSIZE;
  373.     wordlist();
  374.  
  375.     return(TRUE);
  376. }
  377.